// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package com.xiaomi.channel.openauth; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Handler; import android.text.TextUtils; import com.xiaomi.channel.openauth.utils.Base64Coder; import com.xiaomi.channel.openauth.utils.Network; import java.net.URL; import java.net.URLEncoder; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.Scanner; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.http.NameValuePair; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.message.BasicNameValuePair; // Referenced classes of package com.xiaomi.channel.openauth: // APP2SDKReceiver, b, SDK2APPReceiver, AuthorizeActivity, // c public class AuthorizeHelper { public static final String ACTION_AUTH_ACTIVITY = "com.xiaomi.openauth.action.AUTH"; public static final String AUTHORIZATION_CODE = "authorization_code"; public static String AUTH_ACTIVITY_NAME = "com.xiaomi.channel.openauth.AuthorizeActivity"; public static final String HEADER_FLAG = "&&&START&&&"; public static final String OAUTH2_HOST = "https://account.xiaomi.com"; public static final String REFRESH_TOKEN = "refresh_token"; public static int REQUESTCODE_CODE = 0; public static int REQUESTCODE_TOKEN = 0; public static final String TOKEN_PATH = "https://account.xiaomi.com/oauth2/token"; public static final String TYPE_CODE = "code"; public static final String TYPE_TOKEN = "token"; private static final String a = "HmacSHA1"; private static final String b = "UTF-8"; private static Random c = new Random(); public AuthorizeHelper() { } static Intent a(Context context) { return b(context); } static void a() { b(); } private static void a(Activity activity, int i, long l, String s, String s1, String s2, String s3, String s4) { if (l < 0L) { throw new IllegalArgumentException("client id is error!!!"); } if (TextUtils.isEmpty(s)) { throw new IllegalArgumentException("redirect url is empty!!!"); } if (TextUtils.isEmpty(s1)) { throw new IllegalArgumentException("responseType is empty!!!"); } else { IntentFilter intentfilter = new IntentFilter(APP2SDKReceiver.AUTH_ACTION_NAME); APP2SDKReceiver app2sdkreceiver = new APP2SDKReceiver(); activity.registerReceiver(app2sdkreceiver, intentfilter); a(activity, s4); (new Handler()).postDelayed(new b(activity, app2sdkreceiver, l, s, s1, s2, s3, i), 100L); return; } } private static void a(Activity activity, String s) { Intent intent = new Intent(SDK2APPReceiver.AUTH_ACTION_NAME); if (!TextUtils.isEmpty(s)) { intent.putExtra("user_id", s); } activity.sendBroadcast(intent); } private static boolean a(Context context, Intent intent) { return context.getPackageManager().queryIntentActivities(intent, 0x10000).size() > 0; } private static Intent b(Context context) { Iterator iterator = APP2SDKReceiver.availableApp.iterator(); _L2: String s; Intent intent1; PackageManager packagemanager; do { if (!iterator.hasNext()) { Intent intent = new Intent(); intent.setClass(context, com/xiaomi/channel/openauth/AuthorizeActivity); return intent; } s = (String)iterator.next(); } while (TextUtils.isEmpty(s)); intent1 = new Intent(); intent1.setComponent(new ComponentName(s, AUTH_ACTIVITY_NAME)); packagemanager = context.getPackageManager(); if (!"com.xiaomi.channel".equals(s)) { break MISSING_BLOCK_LABEL_119; } int i = packagemanager.getPackageInfo(s, 0).versionCode; if (i <= 860) { continue; /* Loop/switch isn't completed */ } if (a(context, intent1)) { return intent1; } continue; /* Loop/switch isn't completed */ android.content.pm.PackageManager.NameNotFoundException namenotfoundexception; namenotfoundexception; if (true) goto _L2; else goto _L1 _L1: } private static void b() { APP2SDKReceiver.availableApp.clear(); } public static HashMap buildMacRequestHead(String s, String s1, String s2) { Object aobj[] = new Object[3]; aobj[0] = URLEncoder.encode(s, "UTF-8"); aobj[1] = URLEncoder.encode(s1, "UTF-8"); aobj[2] = URLEncoder.encode(s2, "UTF-8"); String s3 = String.format("MAC access_token=\"%s\", nonce=\"%s\",mac=\"%s\"", aobj); HashMap hashmap = new HashMap(); hashmap.put("Authorization", s3); return hashmap; } public static String encodeSign(byte abyte0[]) { return new String(Base64Coder.encode(abyte0)); } public static byte[] encryptHMACSha1(byte abyte0[], byte abyte1[]) { SecretKeySpec secretkeyspec = new SecretKeySpec(abyte1, "HmacSHA1"); Mac mac = Mac.getInstance("HmacSHA1"); mac.init(secretkeyspec); mac.update(abyte0); return mac.doFinal(); } public static String generateNonce() { long l = c.nextLong(); int i = (int)(System.currentTimeMillis() / 60000L); return (new StringBuilder(String.valueOf(l))).append(":").append(i).toString(); } public static String generateUrl(String s, List list) { if (list == null || list.size() <= 0) goto _L2; else goto _L1 _L1: android.net.Uri.Builder builder; Iterator iterator; builder = Uri.parse(s).buildUpon(); iterator = list.iterator(); _L6: if (iterator.hasNext()) goto _L4; else goto _L3 _L3: s = builder.build().toString(); _L2: return s; _L4: NameValuePair namevaluepair = (NameValuePair)iterator.next(); builder.appendQueryParameter(namevaluepair.getName(), namevaluepair.getValue()); if (true) goto _L6; else goto _L5 _L5: } public static String getAccessTokenByAuthorizationCode(Context context, String s, long l, String s1, String s2) { ArrayList arraylist = new ArrayList(); arraylist.add(new BasicNameValuePair("client_id", String.valueOf(l))); arraylist.add(new BasicNameValuePair("grant_type", "authorization_code")); arraylist.add(new BasicNameValuePair("client_secret", s1)); arraylist.add(new BasicNameValuePair("token_type", "mac")); arraylist.add(new BasicNameValuePair("redirect_uri", s2)); arraylist.add(new BasicNameValuePair("code", s)); String s3 = Network.downloadXml(context, new URL(generateUrl("https://account.xiaomi.com/oauth2/token", arraylist))); if (!TextUtils.isEmpty(s3)) { s3 = s3.replace("&&&START&&&", ""); } return s3; } public static String getAccessTokenByRefreshToken(Context context, String s, long l, String s1, String s2, String s3, String s4, String s5) { ArrayList arraylist = new ArrayList(); arraylist.add(new BasicNameValuePair("client_id", String.valueOf(l))); arraylist.add(new BasicNameValuePair("grant_type", "refresh_token")); arraylist.add(new BasicNameValuePair("client_secret", s1)); arraylist.add(new BasicNameValuePair("token_type", "mac")); arraylist.add(new BasicNameValuePair("redirect_uri", s2)); arraylist.add(new BasicNameValuePair("refresh_token", s)); arraylist.add(new BasicNameValuePair("token_type", s3)); arraylist.add(new BasicNameValuePair("mac_key", s4)); arraylist.add(new BasicNameValuePair("mac_algorithm", s5)); String s6 = Network.downloadXml(context, new URL(generateUrl("https://account.xiaomi.com/oauth2/token", arraylist))); if (!TextUtils.isEmpty(s6)) { s6 = s6.replace("&&&START&&&", ""); } return s6; } public static String getMacAccessTokenSignatureString(String s, String s1, String s2, String s3, String s4, String s5, String s6) { if ("HmacSHA1".equalsIgnoreCase(s6)) { StringBuilder stringbuilder = new StringBuilder(""); stringbuilder.append((new StringBuilder(String.valueOf(s))).append("\n").toString()); stringbuilder.append((new StringBuilder(String.valueOf(s1.toUpperCase()))).append("\n").toString()); stringbuilder.append((new StringBuilder(String.valueOf(s2))).append("\n").toString()); stringbuilder.append((new StringBuilder(String.valueOf(s3))).append("\n").toString()); if (!TextUtils.isEmpty(s4)) { StringBuffer stringbuffer = new StringBuffer(); ArrayList arraylist = new ArrayList(); URLEncodedUtils.parse(arraylist, new Scanner(s4), "UTF-8"); Collections.sort(arraylist, new c()); stringbuffer.append(URLEncodedUtils.format(arraylist, "UTF-8")); stringbuilder.append((new StringBuilder(String.valueOf(stringbuffer.toString()))).append("\n").toString()); } return encodeSign(encryptHMACSha1(stringbuilder.toString().getBytes("UTF-8"), s5.getBytes("UTF-8"))); } else { throw new NoSuchAlgorithmException((new StringBuilder("error mac algorithm : ")).append(s6).toString()); } } public static void startAuthorizeActivityForResultByCodeType(Activity activity, long l, String s, String s1, String s2) { a(activity, REQUESTCODE_CODE, l, s, "code", s1, s2, null); } public static void startAuthorizeActivityForResultByCodeType(Activity activity, long l, String s, String s1, String s2, String s3) { a(activity, REQUESTCODE_CODE, l, s, "code", s1, s2, s3); } public static void startAuthorizeActivityForResultByTokenType(Activity activity, long l, String s, String s1, String s2) { a(activity, REQUESTCODE_TOKEN, l, s, "token", s1, s2, null); } public static void startAuthorizeActivityForResultByTokenType(Activity activity, long l, String s, String s1, String s2, String s3) { a(activity, REQUESTCODE_TOKEN, l, s, "token", s1, s2, s3); } static { REQUESTCODE_CODE = 10001; REQUESTCODE_TOKEN = 10002; } }